package kr.co.bettersoftportal.site.management.controller;


import kr.co.bettersoftportal.site.domain.Comment;
import kr.co.bettersoftportal.site.domain.CommunityBoard;
import kr.co.bettersoftportal.site.domain.UploadFile;
import kr.co.bettersoftportal.site.management.service.BettersoftPortalService;
import kr.co.bettersoftportal.site.management.service.CommentService;
import kr.co.bettersoftportal.site.management.service.CommunityBoardService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 커뮤니티 게시판 컨트롤러
 */
public class CommunityBoardController extends MultiActionController {

    // SLF4J Logging
    private Logger logger = LoggerFactory.getLogger(CommunityBoardController.class);

    @Autowired
    private BettersoftPortalService bettersoftPortalService = null;

    @Autowired
    private LocaleResolver localeResolver  = null;

    @Autowired
    private CommentService commentService  = null;

    @Autowired
    private CommunityBoardService communityBoardService  = null;


    /**
     * Community Board Method
     */


    /**
     * community Board 리스트 출력
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView communityBoardList(HttpServletRequest request, HttpServletResponse response) throws Exception {
        CommunityBoard board = new CommunityBoard();
        bind(request, board);

        board.setActivate_yn("Y");

        /**
         * Null 에러 방지용 공백 전환
         */
        if(board.getTitle() == null){
            board.setTitle("");
        }

        if(board.getWriter_id() == null){
            board.setWriter_id("");
        }

        if(board.getWriter_nick_name() == null){
            board.setWriter_nick_name("");
        }

        if(board.getContent() == null){
            board.setContent("");
        }


//        logger.info("communityBoardList");
//        logger.info("title     : {}", board.getTitle());
//        logger.info("id        : {}", board.getWriter_id());
//        logger.info("nickName  : {}", board.getWriter_nick_name());
//        logger.info("content   : {}", board.getContent());

        /**
         * 검색어를 이용해 게시판을 DB로 부터 받아와 boardList 에 담는다
         * 페이징을 위해 게시물의 총 갯수를 totalCount 에 담는다
         */

        java.util.List boardList = communityBoardService.getBoardListBySearchword(board);
        String totalCount = communityBoardService.getTotalCountBySearchword(board);
        // 시간 분할.
        CommunityBoard tmpboard= new CommunityBoard();
        String full_date= "";
        String date_part_year = "";
        String date_part_month = "";
        String date_part_day = "";
        String date_part_hour = "";
        String date_part_minute = "";
        for(int i =0; i<boardList.size(); i++){
            tmpboard = (CommunityBoard)boardList.get(i);
            full_date = tmpboard.getModify_date();
            if(full_date!=null && full_date.length()>16){       // yyyy-mm-dd hh:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
                date_part_year = full_date.substring(0,4);
                date_part_month = full_date.substring(5,7);
                date_part_day = full_date.substring(8,10);
                date_part_hour = full_date.substring(11,13);
                date_part_minute = full_date.substring(14,16);
                ((CommunityBoard) boardList.get(i)).setDate_part_year(date_part_year);
                ((CommunityBoard) boardList.get(i)).setDate_part_month(date_part_month);
                ((CommunityBoard) boardList.get(i)).setDate_part_day(date_part_day);
                ((CommunityBoard) boardList.get(i)).setDate_part_hour(date_part_hour);
                ((CommunityBoard) boardList.get(i)).setDate_part_minute(date_part_minute);
            }
        }

        /**
         * 페이징 처리를 위한 부분
         */
        request.setAttribute("param", request);
        request.setAttribute("totalRow", totalCount);
        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());
        return new ModelAndView(request.getParameter("nextTarget"), "boardList", boardList);
    }

    /**
     * community Board 리스트 출력
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView communityBoardSearch(HttpServletRequest request, HttpServletResponse response) throws Exception {
        CommunityBoard board = new CommunityBoard();
        bind(request, board);

        board.setActivate_yn("Y");

//        logger.info("communityBoardSearch");
//        logger.info("title     : {}", board.getTitle());
//        logger.info("id        : {}", board.getWriter_id());
//        logger.info("nickName  : {}", board.getWriter_nick_name());
//        logger.info("content   : {}", board.getContent());

        /**
         * 검색어를 이용해 게시판을 DB로 부터 받아와 boardList 에 담는다
         * 페이징을 위해 게시물의 총 갯수를 totalCount 에 담는다
         */
        java.util.List boardList = communityBoardService.getBoardListBySearchword(board);
        String totalCount = communityBoardService.getTotalCountBySearchword(board);
        // 시간 분할.
        CommunityBoard tmpboard= new CommunityBoard();
        String full_date= "";
        String date_part_year = "";
        String date_part_month = "";
        String date_part_day = "";
        String date_part_hour = "";
        String date_part_minute = "";
        for(int i =0; i<boardList.size(); i++){
            tmpboard = (CommunityBoard)boardList.get(i);
            full_date = tmpboard.getModify_date();
            if(full_date!=null && full_date.length()>16){       // yyyy-mm-dd hh:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
                date_part_year = full_date.substring(0,4);
                date_part_month = full_date.substring(5,7);
                date_part_day = full_date.substring(8,10);
                date_part_hour = full_date.substring(11,13);
                date_part_minute = full_date.substring(14,16);
                ((CommunityBoard) boardList.get(i)).setDate_part_year(date_part_year);
                ((CommunityBoard) boardList.get(i)).setDate_part_month(date_part_month);
                ((CommunityBoard) boardList.get(i)).setDate_part_day(date_part_day);
                ((CommunityBoard) boardList.get(i)).setDate_part_hour(date_part_hour);
                ((CommunityBoard) boardList.get(i)).setDate_part_minute(date_part_minute);
            }
        }

        /**
         * 페이징 처리를 위한 부분
         */
        request.setAttribute("param", request);
        request.setAttribute("totalRow", totalCount);
        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());
        return new ModelAndView(request.getParameter("nextTarget"), "boardList", boardList);
    }

    /**
     * Community Board 글수정
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */

    public ModelAndView communityBoardUpdate(HttpServletRequest request, HttpServletResponse response) throws Exception{

        CommunityBoard board = new CommunityBoard();
        bind(request, board);

        board.setActivate_yn("Y");


        /**
         * Null 에러 방지용 공백 전환
         */
        if(board.getTitle() == null){
            return new ModelAndView("index");
        }

        if(board.getWriter_id() == null){
            return new ModelAndView("index");
        }

        if(board.getWriter_nick_name() == null){
            return new ModelAndView("index");
        }

        if(board.getContent() == null){
            return new ModelAndView("index");
        }



//        logger.info("communityBoardUpdate");
//        logger.info("title     : {}", board.getTitle());
//        logger.info("id        : {}", board.getWriter_id());
//        logger.info("nickName  : {}", board.getWriter_nick_name());
//        logger.info("content   : {}", board.getContent());


        java.util.List boardList = communityBoardService.getBoardListBySearchword(board); // Board List 꺼내와 List 에 담기
        String totalCount = communityBoardService.getTotalCountBySearchword(board); // 꺼내온 갯수
        // 시간 분할.
        CommunityBoard tmpboard= new CommunityBoard();
        String full_date= "";
        String date_part_year = "";
        String date_part_month = "";
        String date_part_day = "";
        String date_part_hour = "";
        String date_part_minute = "";
        for(int i =0; i<boardList.size(); i++){
            tmpboard = (CommunityBoard)boardList.get(i);
            full_date = tmpboard.getModify_date();
            if(full_date!=null && full_date.length()>16){       // yyyy-mm-dd hh:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
                date_part_year = full_date.substring(0,4);
                date_part_month = full_date.substring(5,7);
                date_part_day = full_date.substring(8,10);
                date_part_hour = full_date.substring(11,13);
                date_part_minute = full_date.substring(14,16);
                ((CommunityBoard) boardList.get(i)).setDate_part_year(date_part_year);
                ((CommunityBoard) boardList.get(i)).setDate_part_month(date_part_month);
                ((CommunityBoard) boardList.get(i)).setDate_part_day(date_part_day);
                ((CommunityBoard) boardList.get(i)).setDate_part_hour(date_part_hour);
                ((CommunityBoard) boardList.get(i)).setDate_part_minute(date_part_minute);
            }
        }

        String boardno = board.getCommunity_board_no();

        CommunityBoard tempBoard = new CommunityBoard();

        /**
         * 게시물 수정을 위해 boardno 을 이용해 게시물의 정보를 얻어온다.
         * 다음 수정페이지 에서 수정하기 위한 원래 게시물의 정보를 보여준다.
         */
        tempBoard = communityBoardService.getBoardByNo(boardno);
        //시간분할
        full_date = tempBoard.getModify_date();
        if(full_date!=null && full_date.length()>16){       // yyyy-MM-dd HH:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
            date_part_year = full_date.substring(0,4);
            date_part_month = full_date.substring(5,7);
            date_part_day = full_date.substring(8,10);
            date_part_hour = full_date.substring(11,13);
            date_part_minute = full_date.substring(14,16);
            tempBoard.setDate_part_year(date_part_year);
            tempBoard.setDate_part_month(date_part_month);
            tempBoard.setDate_part_day(date_part_day);
            tempBoard.setDate_part_hour(date_part_hour);
            tempBoard.setDate_part_minute(date_part_minute);
        }

        request.setAttribute("param", request);
        request.setAttribute("totalRow", totalCount);
        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());

        ModelAndView mav = new ModelAndView();

        mav.setViewName(request.getParameter("nextTarget"));
        mav.addObject("board", tempBoard);
        mav.addObject("boardList", boardList);
        return mav;
    }

    /**
     * Update 페이지에서 받아온 내용을 바탕으로 DB에 기록하고 다시 List로 돌아감
     * Update Action 을 수행하는 Method
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView communityBoardUpdateAction(HttpServletRequest request, HttpServletResponse response) throws Exception{
        CommunityBoard board = new CommunityBoard();
        bind(request, board);

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = df.format(new Date());
        String result = "";

        /**
         * 넘어온 Parameter 들을 바탕으로
         * 게시물을 수정하여 DB에 기록한다.
         */
        String img_changed = request.getParameter("img_changed");
        if(img_changed.equals("no")){               // 파일 변경 없음 -> 이미지 제외한 업로드.
            board.setModify_date(strDate);

            result = communityBoardService.updateBoardNotImage(board); // updateBoard 서비스를 호출 결과를 result 에 담는다
        }else if(img_changed.equals("yes")){        // 파일 변경 있음 -> 이미지 포함 업로드 실시.
            // 파일 업로드 시작
            MultipartHttpServletRequest mpRequest = (MultipartHttpServletRequest) request; // HttpServletRequest 를 MultipartHttpServletRequest 로 casting

            MultipartFile mpFile = mpRequest.getFile("fileUp"); // casting 된 request 에서 파일 얻어오기
            if(mpFile.isEmpty()){ // 첨부 파일이 있는지 검사. 없는 경우
                board.setAdd_file_yn("N");
            }else{                                  // 첨부파일 있는 경우.
                String uploadPath = request.getRealPath("/");
                String filePath = getServletContext().getRealPath("/upload/");
                UploadFile file = communityBoardService.uploadFile(mpFile, uploadPath + "/upload/"); // 있다면 파일 업로드 서비스를 수행 (MultipartFile, 업로드 경로)
//                if(file.getContentType().contains("image")){ // 파일 형식을 검색 Image 형식이면 썸네일을 만든다
//                    File src = new File(uploadPath + "/upload/" + file.getTempFileName()); // 업로드된 이미지 원본 경로
//                }

                /**
                 * 첨부파일에 관련된 속성들을 도메인에 셋팅
                 */
                board.setAdd_file_yn("Y");
                board.setAdd_file_original_name(file.getFileName());
                board.setAdd_file_temp_name(file.getTempFileName());
                board.setAdd_file_content_type(file.getContentType());
                board.setAdd_file_size(file.getFileSize());
            }
            // 파일 업로드 끝
            board.setModify_date(strDate);

            result = communityBoardService.updateBoard(board); // updateBoard 서비스를 호출 결과를 result 에 담는다
        }

        board.setActivate_yn("Y");

        logger.info("communityBoardUpdateAction");
        logger.info("title     : {}", board.getTitle());
        logger.info("id        : {}", board.getWriter_id());
        logger.info("nickName  : {}", board.getWriter_nick_name());
//        logger.info("content   : {}", board.getContent());

        /**
         * 작성한 글을 보여주기 위해 게시물을 담아온다.
         */
        java.util.List boardList = communityBoardService.getBoardListBySearchword(board); // Board List 꺼내와 List 에 담기
        String totalCount = communityBoardService.getTotalCountBySearchword(board); // 꺼내온 갯수
        // 시간 분할.
        CommunityBoard tmpboard= new CommunityBoard();
        String full_date= "";
        String date_part_year = "";
        String date_part_month = "";
        String date_part_day = "";
        String date_part_hour = "";
        String date_part_minute = "";
        for(int i =0; i<boardList.size(); i++){
            tmpboard = (CommunityBoard)boardList.get(i);
            full_date = tmpboard.getModify_date();
            if(full_date!=null && full_date.length()>16){       // yyyy-mm-dd hh:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
                date_part_year = full_date.substring(0,4);
                date_part_month = full_date.substring(5,7);
                date_part_day = full_date.substring(8,10);
                date_part_hour = full_date.substring(11,13);
                date_part_minute = full_date.substring(14,16);
                ((CommunityBoard) boardList.get(i)).setDate_part_year(date_part_year);
                ((CommunityBoard) boardList.get(i)).setDate_part_month(date_part_month);
                ((CommunityBoard) boardList.get(i)).setDate_part_day(date_part_day);
                ((CommunityBoard) boardList.get(i)).setDate_part_hour(date_part_hour);
                ((CommunityBoard) boardList.get(i)).setDate_part_minute(date_part_minute);
            }
        }

        /**
         * 페이징 처리를 위한 부분
         */
        request.setAttribute("param", request);
        request.setAttribute("totalRow", totalCount);
        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());

        /**
         * 사용자가 작성한 글을 보여주기 위해 새롭게 작성된 글주소로 redirect
         */
        //return new ModelAndView(request.getParameter("nextTarget"), "boardList", boardList);
        return new ModelAndView("redirect:./communityBoardContent.do?&boardno=" + board.getCommunity_board_no() + "&page=" + board.getCurrentPage() + "&token=" + board.getCommunity_board_no() + "&title&writer_id&writer_nick_name&&content");
    }

    /**
     * Community Board 글 작성 페이지로 이동
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView communityBoardWrite(HttpServletRequest request, HttpServletResponse response) throws Exception{
        CommunityBoard board = new CommunityBoard();
        bind(request, board);

        board.setActivate_yn("Y");
        board.setHitcount("0");
        board.setReply_count("0");
        board.setVote("0");
        board.setNegative("0");
        board.setReport("0");

        /**
         * Null 에러 방지용 공백 전환
         */
        if(board.getTitle() == null){
            return new ModelAndView("index");
        }

        if(board.getWriter_id() == null){
            return new ModelAndView("index");
        }

        if(board.getWriter_nick_name() == null){
            return new ModelAndView("index");
        }

        if(board.getContent() == null){
            return new ModelAndView("index");
        }

//        logger.info("communityBoardWrite");
//        logger.info("title     : {}", board.getTitle());
//        logger.info("id        : {}", board.getWriter_id());
//        logger.info("nickName  : {}", board.getWriter_nick_name());
//        logger.info("content   : {}", board.getContent());


        java.util.List boardList = communityBoardService.getBoardListBySearchword(board); // Board List 꺼내와 List 에 담기
        String totalCount = communityBoardService.getTotalCountBySearchword(board); // 꺼내온 갯수
        // 시간 분할.
        CommunityBoard tmpboard= new CommunityBoard();
        String full_date= "";
        String date_part_year = "";
        String date_part_month = "";
        String date_part_day = "";
        String date_part_hour = "";
        String date_part_minute = "";
        for(int i =0; i<boardList.size(); i++){
            tmpboard = (CommunityBoard)boardList.get(i);
            full_date = tmpboard.getModify_date();
            if(full_date!=null && full_date.length()>16){       // yyyy-mm-dd hh:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
                date_part_year = full_date.substring(0,4);
                date_part_month = full_date.substring(5,7);
                date_part_day = full_date.substring(8,10);
                date_part_hour = full_date.substring(11,13);
                date_part_minute = full_date.substring(14,16);
                ((CommunityBoard) boardList.get(i)).setDate_part_year(date_part_year);
                ((CommunityBoard) boardList.get(i)).setDate_part_month(date_part_month);
                ((CommunityBoard) boardList.get(i)).setDate_part_day(date_part_day);
                ((CommunityBoard) boardList.get(i)).setDate_part_hour(date_part_hour);
                ((CommunityBoard) boardList.get(i)).setDate_part_minute(date_part_minute);
            }
        }

        request.setAttribute("param", request);
        request.setAttribute("totalRow", totalCount);
        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());
        return new ModelAndView(request.getParameter("nextTarget"), "boardList", boardList);
    }


    /**
     * Community Board 글 작성 페이지에서 받아와 DB에 기록하고 작성된 게시물로 돌아감
     *
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView communityBoardWriteAction(HttpServletRequest request, HttpServletResponse response) throws Exception{



        CommunityBoard board = new CommunityBoard();
        bind(request, board);

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = df.format(new Date());
        board.setRegister_date(strDate);


        /**
         * Null 에러 방지용 공백 전환
         */
        if(board.getTitle() == null){
            return new ModelAndView("index");
        }

        if(board.getWriter_id() == null){
            return new ModelAndView("index");
        }

        if(board.getWriter_nick_name() == null){
            return new ModelAndView("index");
        }

        if(board.getContent() == null){
            return new ModelAndView("index");
        }


        // 파일 업로드 시작
        MultipartHttpServletRequest mpRequest = (MultipartHttpServletRequest) request; // HttpServletRequest 를 MultipartHttpServletRequest 로 casting

        MultipartFile mpFile = mpRequest.getFile("fileUp"); // casting 된 request 에서 파일 얻어오기

//        logger.info("communityBoardWriteAction");
//        logger.info("title     : {}", board.getTitle());
//        logger.info("id        : {}", board.getWriter_id());
//        logger.info("nickName  : {}", board.getWriter_nick_name());
//        logger.info("content   : {}", board.getContent());

        /**
         * 첨부파일이 있는지 검사하기 위해 request 로 부터 받은 mpFile 이 empty 인지 검사한다.
         */
        if(mpFile.isEmpty()){
            /**
             * 없다면 작성된 게시물의 Add_file_yn 란을 n 으로 설정
             */
            board.setAdd_file_yn("N");
        }else{
            /**
             * 첨부 파일이 존재한다면 파일일 업로드 서비스를 수행 (MultipartFile, 업로드 경로)
             */
            String uploadPath = request.getRealPath("/");
            UploadFile file = communityBoardService.uploadFile(mpFile, uploadPath + "/upload/");

            /**
             * 첨부파일에 관련된 속성들을 도메인에 셋팅
             */
            board.setAdd_file_yn("Y");
            board.setAdd_file_original_name(file.getFileName());
            board.setAdd_file_temp_name(file.getTempFileName());
            board.setAdd_file_content_type(file.getContentType());
            board.setAdd_file_size(file.getFileSize());

        }
        // 파일 업로드 끝

        String result = "";

        board.setHitcount("0");
        board.setReply_count("0");
        board.setVote("0");
        board.setNegative("0");
        board.setReport("0");
        board.setActivate_yn("Y");

        result = communityBoardService.writeBoard(board); // writeBoard 서비스를 호출 결과를 result 에 담는다

        /**
         * 작성한 글을 보여주기 위해 게시물을 담아온다.
         */
        java.util.List boardList = communityBoardService.getBoardListBySearchword(board);
        String totalCount = communityBoardService.getTotalCountBySearchword(board);
        // 시간 분할.
        CommunityBoard tmpboard= new CommunityBoard();
        String full_date= "";
        String date_part_year = "";
        String date_part_month = "";
        String date_part_day = "";
        String date_part_hour = "";
        String date_part_minute = "";
        for(int i =0; i<boardList.size(); i++){
            tmpboard = (CommunityBoard)boardList.get(i);
            full_date = tmpboard.getModify_date();
            if(full_date!=null && full_date.length()>16){       // yyyy-mm-dd hh:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
                date_part_year = full_date.substring(0,4);
                date_part_month = full_date.substring(5,7);
                date_part_day = full_date.substring(8,10);
                date_part_hour = full_date.substring(11,13);
                date_part_minute = full_date.substring(14,16);
                ((CommunityBoard) boardList.get(i)).setDate_part_year(date_part_year);
                ((CommunityBoard) boardList.get(i)).setDate_part_month(date_part_month);
                ((CommunityBoard) boardList.get(i)).setDate_part_day(date_part_day);
                ((CommunityBoard) boardList.get(i)).setDate_part_hour(date_part_hour);
                ((CommunityBoard) boardList.get(i)).setDate_part_minute(date_part_minute);
            }
        }

        /**
         * 페이징 처리를 위한 부분
         */
        request.setAttribute("param", request);
        request.setAttribute("totalRow", totalCount);
        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());

        /**
         * 게시판목록을 처음부분부터 다시 보여준다.
         */
        return new ModelAndView("redirect:/communityBoardList.do?&title&writer_id&writer_nick_name&&content", "boardList", boardList);
    }

    /**
     * communityBoard 글삭제
     * activate_yn = n
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */

    public ModelAndView communityBoardDelete(HttpServletRequest request, HttpServletResponse response) throws Exception{
        CommunityBoard board = new CommunityBoard();
        bind(request, board);

        String result = "";

        /**
         * 삭제된 날짜를 기록하기 위해 브라우져로 부터 date 를 받아온다.
         */
        SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
        String strDate = df.format(new Date());
        board.setModify_date(strDate);

        /**
         * Acticate_yn 를 n 으로 설정
         */
        board.setActivate_yn("N");

        /**
         * Null 에러 방지용 공백 전환
         */
        if(board.getTitle() == null){
            return new ModelAndView("index");
        }

        if(board.getWriter_id() == null){
            return new ModelAndView("index");
        }

        if(board.getWriter_nick_name() == null){
            return new ModelAndView("index");
        }

        if(board.getContent() == null){
            return new ModelAndView("index");
        }

        logger.info("communityBoardDelete");
        logger.info("title     : {}", board.getTitle());
        logger.info("id        : {}", board.getWriter_id());
        logger.info("nickName  : {}", board.getWriter_nick_name());
//        logger.info("content   : {}", board.getContent());

        /**
         * DB에 board 도메인을 덮어쓴다. 삭제가 아닌 Activate_yn 이 n 인 도메인을 덮어씀
         */

        result = communityBoardService.deleteBoard(board); // deleteBoard 서비스를 호출 결과를 result 에 담는다
        board.setActivate_yn("Y");
        board.setWriter_id(""); // 검색값을 초기화
        java.util.List boardList = communityBoardService.getBoardListBySearchword(board); // Board List 꺼내와 List 에 담기
        String totalCount = communityBoardService.getTotalCountBySearchword(board); // 꺼내온 갯수
        // 시간 분할.
        CommunityBoard tmpboard= new CommunityBoard();
        String full_date= "";
        String date_part_year = "";
        String date_part_month = "";
        String date_part_day = "";
        String date_part_hour = "";
        String date_part_minute = "";
        for(int i =0; i<boardList.size(); i++){
            tmpboard = (CommunityBoard)boardList.get(i);
            full_date = tmpboard.getModify_date();
            if(full_date!=null && full_date.length()>16){       // yyyy-mm-dd hh:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
                date_part_year = full_date.substring(0,4);
                date_part_month = full_date.substring(5,7);
                date_part_day = full_date.substring(8,10);
                date_part_hour = full_date.substring(11,13);
                date_part_minute = full_date.substring(14,16);
                ((CommunityBoard) boardList.get(i)).setDate_part_year(date_part_year);
                ((CommunityBoard) boardList.get(i)).setDate_part_month(date_part_month);
                ((CommunityBoard) boardList.get(i)).setDate_part_day(date_part_day);
                ((CommunityBoard) boardList.get(i)).setDate_part_hour(date_part_hour);
                ((CommunityBoard) boardList.get(i)).setDate_part_minute(date_part_minute);
            }
        }

        request.setAttribute("param", request);
        request.setAttribute("totalRow", totalCount);
        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());

        return new ModelAndView(request.getParameter("nextTarget"), "boardList", boardList);
    }

    /**
     * community Board 글내용 보기
     *
     * 첨부파일 add_file_yn 검사하여 있다면 다운로드 가능
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView communityBoardContent(HttpServletRequest request, HttpServletResponse response) throws Exception{

        CommunityBoard board = new CommunityBoard();
        bind(request, board);

        /**
         * Null 에러 방지용 공백 전환
         */
        if(request.getParameter("boardno") == null){
            return new ModelAndView("redirect:communityBoardList.do");
        }

        if(request.getParameter("page") == null){
            return new ModelAndView("redirect:communityBoardList.do");
        }

        board.setCommunity_board_no(request.getParameter("boardno")); // GET 방식으로 받아온 boardno 파라미터를 도메인에 셋팅
        board.setCurrentPage(Integer.parseInt(request.getParameter("page"))); // GET 방식으로 받아온 page 파라미터 CurrenPage 에 셋팅
        String voted = request.getParameter("voted");

        /**
         * 게시물 아래에 있는 게시판 목록은 boardList 에 담는다.
         * 게시물에 보여줄 내용들은 community_board_no 으로 DB 에서 받아와 board 도메인에 담아 넘긴다.
         */

        board.setActivate_yn("Y");

//        logger.info("communityBoardContent");
//        logger.info("title     : {}", board.getTitle());
//        logger.info("id        : {}", board.getWriter_id());
//        logger.info("nickName  : {}", board.getWriter_nick_name());
//        logger.info("content   : {}", board.getContent());

        java.util.List boardList = communityBoardService.getBoardListBySearchword(board); // Board List 꺼내와 List 에 담기
        String totalCount = communityBoardService.getTotalCountBySearchword(board); // 꺼내온 갯수
        // 시간 분할.
        CommunityBoard tmpboard= new CommunityBoard();
        String full_date= "";
        String date_part_year = "";
        String date_part_month = "";
        String date_part_day = "";
        String date_part_hour = "";
        String date_part_minute = "";
        for(int i =0; i<boardList.size(); i++){
            tmpboard = (CommunityBoard)boardList.get(i);
            full_date = tmpboard.getModify_date();
            if(full_date!=null && full_date.length()>16){       // yyyy-mm-dd hh:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
                date_part_year = full_date.substring(0,4);
                date_part_month = full_date.substring(5,7);
                date_part_day = full_date.substring(8,10);
                date_part_hour = full_date.substring(11,13);
                date_part_minute = full_date.substring(14,16);
                ((CommunityBoard) boardList.get(i)).setDate_part_year(date_part_year);
                ((CommunityBoard) boardList.get(i)).setDate_part_month(date_part_month);
                ((CommunityBoard) boardList.get(i)).setDate_part_day(date_part_day);
                ((CommunityBoard) boardList.get(i)).setDate_part_hour(date_part_hour);
                ((CommunityBoard) boardList.get(i)).setDate_part_minute(date_part_minute);
            }
        }


        // 줄바꿈 처리
        CommunityBoard tempBoard = new CommunityBoard();

        String tempContent;

        tempBoard = communityBoardService.getBoardByNo(request.getParameter("boardno")); // 임시 도메인에 받아온 도메인 리스트에서 첫번째를 주입한다.
        tempContent = tempBoard.getContent().replace("\r\n", "<br>"); // 게시물 부분을 임시 String 에 넣는다 줄바꿈 처리
        /**
         tempContent.replaceAll("\n", "<br>"); // 줄바꿈 처리를 한다.
         tempContent.replaceAll("\u0020", "&nbsp;"); // 스페이스바 공백 처리를 한다.
         *
         */
        tempBoard.setContent(tempContent); // 임시 String 을 임시 객체에 다시 넣는다
        // 줄바꿈 처리 끝

        //시간분할
        full_date = tempBoard.getModify_date();
        if(full_date!=null && full_date.length()>16){       // yyyy-MM-dd HH:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
            date_part_year = full_date.substring(0,4);
            date_part_month = full_date.substring(5,7);
            date_part_day = full_date.substring(8,10);
            date_part_hour = full_date.substring(11,13);
            date_part_minute = full_date.substring(14,16);
            tempBoard.setDate_part_year(date_part_year);
            tempBoard.setDate_part_month(date_part_month);
            tempBoard.setDate_part_day(date_part_day);
            tempBoard.setDate_part_hour(date_part_hour);
            tempBoard.setDate_part_minute(date_part_minute);
        }

        HttpSession check = request.getSession(false);

        String sessionToken;
        String formToken;


        try{
            if((String)check.getAttribute("sessionToken") == null){
                sessionToken = "";
            }else{
                sessionToken = (String)check.getAttribute("sessionToken");
            }

            if(request.getParameter("token") == null){
                formToken = "";
            }else{
                formToken = request.getParameter("token");
            }




            // hitcount 증가
            int hitCount = Integer.parseInt(tempBoard.getHitcount());
            if(sessionToken.equals(formToken)){
                /**
                 * request 로부터 넘어온 token 과 sessionToken 이 일치하면 hitcount를 증가하지 않는다.
                 */

            }else{
                hitCount++;
                check.setAttribute("sessionToken", formToken);
                /**
                 * hitcount 증가 후
                 * 어느 페이지로부터 온 token 인지를 sessionToken 에 기록한다.
                 * 같은 페이지에서 넘어왔다면 sessionToken 과 request 의 token 이 같기때문에 위의 if문이 실행된다.
                 */
                tempBoard.setHitcount(Integer.toString(hitCount));
                tempBoard.setCommunity_board_no(request.getParameter("boardno"));

                String HitCountResult = communityBoardService.updateHitCount(tempBoard);

            }


        }catch (NullPointerException e){
            return new ModelAndView("redirect:communityBoardList.do");

        }


        /**
         *
         * Comment 담아오기
         * GET 형식으로 넘어온 boardno 을 바탕으로 해당 게시물의 Comment 를 List 로 담아 넘긴다.
         * 모든 게시판에서 같은 형식의 comment 도메인을 사용하기 때문에
         * ibatis query 에서 table 명을 변수로 할당
         * Comment 객체를 넣어서 검색하기 전에 어떤 table 의 comment 인지
         * setComment_db_name 으로 셋팅한다.
         *
         */

        Comment comment = new Comment();
        comment.setBoard_no(request.getParameter("boardno"));
        comment.setComment_db_name("BETTERSOFTPORTAL_COMMUNITY_BOARD_COMMENT");
        comment.setActivate_yn("Y");

        java.util.List commentList = commentService.getCommentListByBoardNo(comment);
        String commentCount = commentService.getTotalCountByNo(comment);


        request.setAttribute("param", request);
        request.setAttribute("totalRow", totalCount);
        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());

        request.setAttribute("commentCount", commentCount);

        /**
         * List 에 담은 댓글 내용들 줄바꿈 처리 하기
         */
        for(int i=0;i<commentList.size();i++){
            comment = (Comment)commentList.get(i);
            comment.setContent(comment.getContent().replace("\r\n", "<br>"));
            commentList.set(i, comment);
        }

        ModelAndView mav = new ModelAndView();
        mav.setViewName(request.getParameter("nextTarget"));
        mav.addObject("board", tempBoard);
        mav.addObject("voted", voted);
        mav.addObject("boardList", boardList);
        mav.addObject("commentList", commentList);
        return mav;
    }

    /**
     * Vote Method 게시물 추천 하기
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
//    public ModelAndView communityBoardVote(HttpServletRequest request, HttpServletResponse response) throws Exception{
//        CommunityBoard board = new CommunityBoard();
//        Vote vote  = new Vote();
//        bind(request, board);
//        String voted = "false";         // 중복 추천 여부.
//        /**
//         * Session 이 존재하면 반환 없을시 Null 을 반환
//         */
//
//        HttpSession session = request.getSession(false);
//
//        String memberId = (String)session.getAttribute("userId");
//
//
//        vote.setContent_no(request.getParameter("boardno"));
//        vote.setUser_id(memberId);
//
//        String checkDuplicate = communityBoardService.checkDuplicateVote(vote);
//        String voteResult = "";
//
//        board.setCommunity_board_no(request.getParameter("boardno")); // GET 방식으로 받아온 boardno 파라미터를 도메인에 셋팅
//        board.setCurrentPage(Integer.parseInt(request.getParameter("page"))); // GET 방식으로 받아온 page 파라미터 CurrenPage 에 셋팅
//
//        /**
//         *  선택한 게시물의 번호를 받아와 번호를 토대로 리스트를 받아온다
//         *  리스트의 첫번째 0 번 index 에 보여줄 게시판의 도메인 객체가 주입
//         *  0번을 포함한 나머지는 게시물 아래에 다시 게시판 리스트를 뿌려준다
//         */
//        board.setActivate_yn("Y");
//
////        logger.info("communityBoardVote");
////        logger.info("title     : {}", board.getTitle());
////        logger.info("id        : {}", board.getWriter_id());
////        logger.info("nickName  : {}", board.getWriter_nick_name());
////        logger.info("content   : {}", board.getContent());
//
//
//        java.util.List boardList = communityBoardService.getBoardListBySearchword(board); // Board List 꺼내와 List 에 담기
//        String totalCount = communityBoardService.getTotalCountBySearchword(board); // 꺼내온 갯수
//        // 시간 분할.
//        CommunityBoard tmpboard= new CommunityBoard();
//        String full_date= "";
//        String date_part_year = "";
//        String date_part_month = "";
//        String date_part_day = "";
//        String date_part_hour = "";
//        String date_part_minute = "";
//        for(int i =0; i<boardList.size(); i++){
//            tmpboard = (CommunityBoard)boardList.get(i);
//            full_date = tmpboard.getModify_date();
//            if(full_date!=null && full_date.length()>16){       // yyyy-mm-dd hh:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
//                date_part_year = full_date.substring(0,4);
//                date_part_month = full_date.substring(5,7);
//                date_part_day = full_date.substring(8,10);
//                date_part_hour = full_date.substring(11,13);
//                date_part_minute = full_date.substring(14,16);
//                ((CommunityBoard) boardList.get(i)).setDate_part_year(date_part_year);
//                ((CommunityBoard) boardList.get(i)).setDate_part_month(date_part_month);
//                ((CommunityBoard) boardList.get(i)).setDate_part_day(date_part_day);
//                ((CommunityBoard) boardList.get(i)).setDate_part_hour(date_part_hour);
//                ((CommunityBoard) boardList.get(i)).setDate_part_minute(date_part_minute);
//            }
//        }
//
//        // 줄바꿈 처리
//        CommunityBoard tempBoard = new CommunityBoard();
//
//        String tempContent;
//
//        tempBoard = communityBoardService.getBoardByNo(request.getParameter("boardno")); // 임시 도메인에 받아온 도메인 리스트에서 첫번째를 주입한다.
//        tempContent = tempBoard.getContent(); // 게시물 부분을 임시 String 에 넣는다
//        tempContent.replaceAll("\n", "<br>"); // 줄바꿈 처리를 한다.
//        tempContent.replaceAll("\u0020", "&nbsp;"); // 스페이스바 공백 처리를 한다.
//
//        tempBoard.setContent(tempContent); // 임시 String 을 임시 객체에 다시 넣는다
//        // 줄바꿈 처리 끝
//
//        //시간분할
//        full_date = tempBoard.getModify_date();
//        if(full_date!=null && full_date.length()>16){       // yyyy-MM-dd HH:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
//            date_part_year = full_date.substring(0,4);
//            date_part_month = full_date.substring(5,7);
//            date_part_day = full_date.substring(8,10);
//            date_part_hour = full_date.substring(11,13);
//            date_part_minute = full_date.substring(14,16);
//            tempBoard.setDate_part_year(date_part_year);
//            tempBoard.setDate_part_month(date_part_month);
//            tempBoard.setDate_part_day(date_part_day);
//            tempBoard.setDate_part_hour(date_part_hour);
//            tempBoard.setDate_part_minute(date_part_minute);
//        }
//
//        // 추천 체크
//        if(checkDuplicate.equals("0")){
//            //게시물 테이블 추천 카운트 업데이트
//            int voteCount = Integer.parseInt(tempBoard.getVote());
//            voteCount++;
//            tempBoard.setVote(Integer.toString(voteCount));
//            tempBoard.setCommunity_board_no(request.getParameter("boardno"));
//            String voteCountResult = communityBoardService.updateVoteCount(tempBoard);
//            // 추천자 리스트에 추가.
//            voteResult = communityBoardService.insertVoterToList(vote);
//            voted = "false";
//        }else{
//            // 중복 추천.. 이미 추천하셨습니다.
//            voted = "true";
//        }
//        /**
//         *
//         * Comment 담아오기
//         *
//         */
//
//        Comment comment = new Comment();
//        comment.setBoard_no(request.getParameter("boardno"));
//        comment.setComment_db_name("BETTERSOFTPORTAL_COMMUNITY_BOARD_COMMENT");
//        comment.setActivate_yn("Y");
//
//        java.util.List commentList = commentService.getCommentListByBoardNo(comment);
//        String commentCount = commentService.getTotalCountByNo(comment);
//
//        request.setAttribute("param", request);
//        request.setAttribute("totalRow", totalCount);
//        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
//        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());
//
//        request.setAttribute("commentCount", commentCount);
//
//        ModelAndView mav = new ModelAndView();
//        mav.setViewName("redirect:communityBoardContent.do?boardno=" + request.getParameter("boardno") + "&page=" + request.getParameter("page") + "&token=" + request.getParameter("boardno") + "&title&writer_id&writer_nick_name&&content");
//        mav.addObject("board", tempBoard);
//        mav.addObject("voted", voted);
//        mav.addObject("boardList", boardList);
//        mav.addObject("commentList", commentList);
//        return mav;
//    }

    /**
     * Negative Method 게시물 비추천 하기
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
//    public ModelAndView communityBoardNegative(HttpServletRequest request, HttpServletResponse response) throws Exception{
//        CommunityBoard board = new CommunityBoard();
//        bind(request, board);
//
//        board.setCommunity_board_no(request.getParameter("boardno")); // GET 방식으로 받아온 boardno 파라미터를 도메인에 셋팅
//        board.setCurrentPage(Integer.parseInt(request.getParameter("page"))); // GET 방식으로 받아온 page 파라미터 CurrenPage 에 셋팅
//
//
//        board.setActivate_yn("Y");
//
////        logger.info("communityBoardNegative");
////        logger.info("title     : {}", board.getTitle());
////        logger.info("id        : {}", board.getWriter_id());
////        logger.info("nickName  : {}", board.getWriter_nick_name());
////        logger.info("content   : {}", board.getContent());
//
//
//        java.util.List boardList = communityBoardService.getBoardListBySearchword(board); // Board List 꺼내와 List 에 담기
//        String totalCount = communityBoardService.getTotalCountBySearchword(board); // 꺼내온 갯수
//        // 시간 분할.
//        CommunityBoard tmpboard= new CommunityBoard();
//        String full_date= "";
//        String date_part_year = "";
//        String date_part_month = "";
//        String date_part_day = "";
//        String date_part_hour = "";
//        String date_part_minute = "";
//        for(int i =0; i<boardList.size(); i++){
//            tmpboard = (CommunityBoard)boardList.get(i);
//            full_date = tmpboard.getModify_date();
//            if(full_date!=null && full_date.length()>16){       // yyyy-mm-dd hh:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
//                date_part_year = full_date.substring(0,4);
//                date_part_month = full_date.substring(5,7);
//                date_part_day = full_date.substring(8,10);
//                date_part_hour = full_date.substring(11,13);
//                date_part_minute = full_date.substring(14,16);
//                ((CommunityBoard) boardList.get(i)).setDate_part_year(date_part_year);
//                ((CommunityBoard) boardList.get(i)).setDate_part_month(date_part_month);
//                ((CommunityBoard) boardList.get(i)).setDate_part_day(date_part_day);
//                ((CommunityBoard) boardList.get(i)).setDate_part_hour(date_part_hour);
//                ((CommunityBoard) boardList.get(i)).setDate_part_minute(date_part_minute);
//            }
//        }
//
//        // 줄바꿈 처리
//        CommunityBoard tempBoard = new CommunityBoard();
//
//        String tempContent;
//
//        tempBoard = communityBoardService.getBoardByNo(request.getParameter("boardno")); // 임시 도메인에 받아온 도메인 리스트에서 첫번째를 주입한다.
//
//        tempContent = tempBoard.getContent(); // 게시물 부분을 임시 String 에 넣는다
//        tempContent.replaceAll("\n", "<br>"); // 줄바꿈 처리를 한다.
//        tempContent.replaceAll("\u0020", "&nbsp;"); // 스페이스바 공백 처리를 한다.
//
//        tempBoard.setContent(tempContent); // 임시 String 을 임시 객체에 다시 넣는다
//
//        // 줄바꿈 처리 끝
//
//        //시간분할
//        full_date = tempBoard.getModify_date();
//        if(full_date!=null && full_date.length()>16){       // yyyy-MM-dd HH:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
//            date_part_year = full_date.substring(0,4);
//            date_part_month = full_date.substring(5,7);
//            date_part_day = full_date.substring(8,10);
//            date_part_hour = full_date.substring(11,13);
//            date_part_minute = full_date.substring(14,16);
//            tempBoard.setDate_part_year(date_part_year);
//            tempBoard.setDate_part_month(date_part_month);
//            tempBoard.setDate_part_day(date_part_day);
//            tempBoard.setDate_part_hour(date_part_hour);
//            tempBoard.setDate_part_minute(date_part_minute);
//        }
//
//
//
//        // 비추천 업데이트
//        int negativeCount = Integer.parseInt(tempBoard.getNegative());
//        negativeCount++;
//        tempBoard.setNegative(Integer.toString(negativeCount));
//        tempBoard.setCommunity_board_no(request.getParameter("boardno"));
//
//        String negativeCountResult = communityBoardService.updateNegativeCount(tempBoard);
//
//
//        /**
//         *
//         * Comment 담아오기
//         *
//         */
//
//        Comment comment = new Comment();
//        comment.setBoard_no(request.getParameter("boardno"));
//        comment.setComment_db_name("BETTERSOFTPORTAL_COMMUNITY_BOARD_COMMENT");
//        comment.setActivate_yn("Y");
//
//        java.util.List commentList = commentService.getCommentListByBoardNo(comment);
//        String commentCount = commentService.getTotalCountByNo(comment);
//
//
//        request.setAttribute("param", request);
//        request.setAttribute("totalRow", totalCount);
//        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
//        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());
//
//        request.setAttribute("commentCount", commentCount);
//
//        ModelAndView mav = new ModelAndView();
//        mav.setViewName("redirect:communityBoardContent.do?boardno=" + request.getParameter("boardno") + "&page=" + request.getParameter("page") + "&token=" + request.getParameter("boardno") + "&title&writer_id&writer_nick_name&&content");
//        mav.addObject("board", tempBoard);
//        mav.addObject("boardList", boardList);
//        mav.addObject("commentList", commentList);
//        return mav;
//    }


    /**
     * Report Method 게시물 신고 하기
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
//    public ModelAndView communityBoardReport(HttpServletRequest request, HttpServletResponse response) throws Exception{
//        CommunityBoard board = new CommunityBoard();
//        bind(request, board);
//
//        Report report = new Report();
//        // reasonKey , reasonDetail, user_id, contentno
//        /**
//         * Session 이 존재하면 반환 없을시 Null 을 반환
//         */
//        HttpSession session = request.getSession(false);
//        String memberId = (String)session.getAttribute("userId");
//
//        report.setUser_id(memberId);
//        report.setContent_no(request.getParameter("boardno"));
//        report.setReason_code(request.getParameter("reasonKey"));
//        report.setReason_detail(request.getParameter("reasonDetail"));
//        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        String strDate = df.format(new Date());
//        report.setReport_date(strDate);
//
//        board.setCommunity_board_no(request.getParameter("boardno")); // GET 방식으로 받아온 boardno 파라미터를 도메인에 셋팅
//        board.setCurrentPage(Integer.parseInt(request.getParameter("page"))); // GET 방식으로 받아온 page 파라미터 CurrenPage 에 셋팅
//
//        board.setActivate_yn("Y");
//
//
////        String totalCount = communityBoardService.getTotalCountBySearchword(board); // 꺼내온 갯수
//
//
//
//        // 줄바꿈 처리
//        CommunityBoard tempBoard = new CommunityBoard();
//
//        String tempContent;
//
//        tempBoard = communityBoardService.getBoardByNo(request.getParameter("boardno")); // 임시 도메인에 받아온 도메인 리스트에서 첫번째를 주입한다.
//
//        tempContent = tempBoard.getContent(); // 게시물 부분을 임시 String 에 넣는다
//        tempContent.replaceAll("\n", "<br>"); // 줄바꿈 처리를 한다.
//        tempContent.replaceAll("\u0020", "&nbsp;"); // 스페이스바 공백 처리를 한다.
//
//        tempBoard.setContent(tempContent); // 임시 String 을 임시 객체에 다시 넣는다
//
//        // 줄바꿈 처리 끝
//
//        // 시간 분할.
//        CommunityBoard tmpboard= new CommunityBoard();
//        String full_date= "";
//        String date_part_year = "";
//        String date_part_month = "";
//        String date_part_day = "";
//        String date_part_hour = "";
//        String date_part_minute = "";
//        //시간분할
//        full_date = tempBoard.getModify_date();
//        if(full_date!=null && full_date.length()>16){       // yyyy-MM-dd HH:mm:ss  0~4. 5~7, 8~10,  / 11~13, 14~16  (중간 공백은 Skip 됨)
//            date_part_year = full_date.substring(0,4);
//            date_part_month = full_date.substring(5,7);
//            date_part_day = full_date.substring(8,10);
//            date_part_hour = full_date.substring(11,13);
//            date_part_minute = full_date.substring(14,16);
//            tempBoard.setDate_part_year(date_part_year);
//            tempBoard.setDate_part_month(date_part_month);
//            tempBoard.setDate_part_day(date_part_day);
//            tempBoard.setDate_part_hour(date_part_hour);
//            tempBoard.setDate_part_minute(date_part_minute);
//        }
//
//
//        //신고 업데이트
//        int reportCount = Integer.parseInt(tempBoard.getReport());
//        reportCount++;
//        tempBoard.setReport(Integer.toString(reportCount));
//        tempBoard.setCommunity_board_no(request.getParameter("boardno"));
//
//        String reportCountResult = communityBoardService.updateReportCount(tempBoard);
//        String reportResult = communityBoardService.communityBoardReport(report);
//        /**
//         *
//         * Comment 담아오기
//         *
//         */
//
//        Comment comment = new Comment();
//        comment.setBoard_no(request.getParameter("boardno"));
//        comment.setComment_db_name("BETTERSOFTPORTAL_COMMUNITY_BOARD_COMMENT");
//        comment.setActivate_yn("Y");
//
//        java.util.List commentList = commentService.getCommentListByBoardNo(comment);
//        String commentCount = commentService.getTotalCountByNo(comment);
//
//        request.setAttribute("param", request);
////        request.setAttribute("totalRow", totalCount);
//        request.setAttribute("currentPage", (new StringBuilder()).append(board.getCurrentPage()).append("").toString());
//        request.setAttribute("pageSize", (new StringBuilder()).append(board.getPageSize()).append("").toString());
//
//        request.setAttribute("commentCount", commentCount);
//
//        ModelAndView mav = new ModelAndView();
////        mav.setViewName("redirect:communityBoardContent.do?boardno=" + request.getParameter("boardno") + "&page=" + request.getParameter("page") + "&title&writer_id&writer_nick_name&&content");
//        mav.setViewName("communityReport");
//        mav.addObject("baord", tempBoard);
//        mav.addObject("closing", "closing");
//        mav.addObject("commentList", commentList);
//        return mav;
//    }


    /**
     * community Board File Download Controller
     * download.do 에서 GET 방식으로
     * 서버에 UUID 를 이용해서 바뀌어 들어간 add_file_temp_name 과
     * 원래 파일의 파일명인 add_file_original_name 을 파라미터로 받아와
     * 다운로드를 구현한다.
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ModelAndView download(HttpServletRequest request, HttpServletResponse response) throws Exception{

        String filePath = request.getRealPath("/") + "/upload/" + request.getParameter("tFileName"); // 서버의 저장경로 + 물리 파일명 받아와 경로를 설정
        String o_fileName = request.getParameter("oFileName"); // 원래 파일명 받아오기

        File file = new File(filePath); // response 할 파일 객체 생성

        response.setContentType("application/octet-stream"); // 반드시 해줘야됨
        response.setContentLength((int)file.length());

        String userAgent = request.getHeader("User-Agent");

//        logger.info("download");
//        logger.info("tFileName : {}", request.getParameter("tFileName"));
//        logger.info("oFileName : {}", request.getParameter("oFileName"));



        boolean ie = userAgent.indexOf("MSIE") > -1; // Internet Explorer 검사

        String fileName = null;

        if(ie){

            fileName = URLEncoder.encode(file.getName(), "utf-8");

        } else {

            fileName = new String(file.getName().getBytes("utf-8"));

        }// end if;


        response.setHeader("Content-Disposition", "attachment; filename=" + o_fileName); // 파일의 본래 이름
        response.setHeader("Content-Transfer-Encoding", "binary");

        // 다운로드 시작
        OutputStream out = response.getOutputStream();
        FileInputStream fis = null;

        try {

            fis = new FileInputStream(file);

            FileCopyUtils.copy(fis, out);


        } catch(Exception e){

            e.printStackTrace();

        }finally{

            if(fis != null){

                try{
                    fis.close();
                }catch(Exception e){}
            }

        }
        // 다운로드 끝

        out.flush();


        return null;

    }


    ///////////////////////////////////////
    // Spring Framework Setter Injection //
    ///////////////////////////////////////




}
